﻿/**
* @file pid.h
* @brief this is a brief description
* @details this is the detail description.
* @author fulong 
* @data 2015/1/10
* @version 1.0
* @par Copyright (c):
* @par First build
*     version: fulong 
*     data: 2015/1/10
*/
#ifndef __PID_H__
#define __PID_H__
#include "../hal_include/hal_types.h"

/*!< PID输出分为1.线形连续PID输出,2.时间－比例PID输出,3.位置比例PID */
typedef struct {
    /*!< 设定目标值,时间比例输出的时候就相当于占空比,0代表100%,(setpoint/ratio)%为占空比 */
    int32 setpoint;
    /*!< 时间比例输出的话才用这个变量，为要达到的采样值 */
    double aim_value;
    /*!< 时间比例输出的话才这个变量，为比例分母 */
    int32 ratio;
    /*!< 测量反馈 */
    double uk;
    /*!< 比例常数 */
    double proportion;
    /*!< 积分常数 */
    double integral;
    /*!< 微分常数 */
    double derivative;
    /*!< e(k-1) */
    double lasterror;
    /*!< e(k-2) */
    double preverror;
    /*!< pid 控制的最大值 */
    int32 pid_max;
    /*!< pid 控制的最小值 */
    int32 pid_min;
    /*!< 取得当前取样值的函数 */
    int32(*get_error_value)(void);
} PID_struct;
extern void pid_init(void);
extern double inc_pid_process(uint8 *proc_err, double feedback);
#endif /* __PID_H__ */


